@@ -120,7 +120,7 @@ module Agents |
||
120 | 120 |
|
121 | 121 |
# Check for optional fields |
122 | 122 |
if options['mode'].present? |
123 |
- errors.add(:base, "mode must be set to on_change or all") unless %w[on_change all].include?(options['mode']) |
|
123 |
+ errors.add(:base, "mode must be set to on_change, all or merge") unless %w[on_change all merge].include?(options['mode']) |
|
124 | 124 |
end |
125 | 125 |
|
126 | 126 |
if options['expected_update_period_in_days'].present? |
@@ -226,10 +226,12 @@ module Agents |
||
226 | 226 |
incoming_events.each do |event| |
227 | 227 |
interpolate_with(event) do |
228 | 228 |
url_to_scrape = event.payload['url'] |
229 |
- valid_url = url_to_scrape =~ /^https?:\/\//i |
|
230 |
- docs = valid_url ? check_url(url_to_scrape) : [] |
|
229 |
+ docs = [] |
|
230 |
+ docs = check_url(url_to_scrape) if url_to_scrape =~ /^https?:\/\//i |
|
231 | 231 |
docs.each do |doc| |
232 |
- create_event payload: doc |
|
232 |
+ new_payload = interpolated['mode'].to_s == "merge" ? event.payload.dup : {} |
|
233 |
+ new_payload.merge! doc |
|
234 |
+ create_event payload: new_payload |
|
233 | 235 |
end |
234 | 236 |
end |
235 | 237 |
end |
@@ -252,7 +254,7 @@ module Agents |
||
252 | 254 |
end |
253 | 255 |
end |
254 | 256 |
true |
255 |
- when 'all', '' |
|
257 |
+ when 'all', 'merge', '' |
|
256 | 258 |
true |
257 | 259 |
else |
258 | 260 |
raise "Illegal options[mode]: #{interpolated['mode']}" |
@@ -521,6 +521,16 @@ fire: hot |
||
521 | 521 |
|
522 | 522 |
expect(Event.last.payload['response_info']).to eq('The reponse from XKCD was 200 OK.') |
523 | 523 |
end |
524 |
+ |
|
525 |
+ it "should support merging of events" do |
|
526 |
+ expect { |
|
527 |
+ @checker.options = @valid_options |
|
528 |
+ @checker.options[:mode] = "merge" |
|
529 |
+ @checker.receive([@event]) |
|
530 |
+ }.to change { Event.count }.by(1) |
|
531 |
+ last_payload = Event.last.payload |
|
532 |
+ expect(last_payload['link']).to eq('Random') |
|
533 |
+ end |
|
524 | 534 |
end |
525 | 535 |
end |
526 | 536 |
|